package tankgame03;

import java.util.Vector;

public class EnemyTank extends Tank implements Runnable {
	//可以保存多颗子弹
	Vector<Shot> shots = new Vector<>();
	//增加成员，EnemyTank可以得到所有敌人坦克的vector
	Vector<EnemyTank> enemyTanks = new Vector<>();

	public EnemyTank(int x, int y) {
		super(x, y);
	}

	//可以将mypanel对象的成员设置到enemytank中
	public void setEnemyTanks(Vector<EnemyTank> enemyTanks) {
		this.enemyTanks = enemyTanks;
	}

	//判断当前这个敌人坦克，是否和enemytanks中的其他坦克发生重叠
	public boolean isOverlap() {
		//判断当前坦克的方向
		switch (getDirection()) {
			case 0://上
				//让当前敌人坦克和其他所有敌人坦克比较
				for (int i = 0; i < enemyTanks.size(); i++) {
					//从vector中取出一辆坦克
					EnemyTank enemyTank = enemyTanks.get(i);
					//不和自己比较
					if (enemyTank != this) {
						//如果敌人坦克是上/下 x的范围：0——40，y的范围：0——60
						if (enemyTank.getDirection() == 0 || enemyTank.getDirection() == 2) {
							//当前坦克左上角坐标：（0，0）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 40
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
							// 右上角坐标：（40，0）
							if (getX() + 40 >= enemyTank.getX() && getX() + 40 <= enemyTank.getX() + 40
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
						}
						//如果敌人坦克是左/右 x的范围：0——60，y的范围：0—40
						if (enemyTank.getDirection() == 1 || enemyTank.getDirection() == 3) {
							//当前坦克左上角坐标：（0，0）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 60
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
							// 右上角坐标：（40，0）
							if (getX() + 40 >= enemyTank.getX() && getX() + 40 <= enemyTank.getX() + 60
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
						}
					}
				}
				break;
			case 1://右
				//让当前敌人坦克和其他所有敌人坦克比较
				for (int i = 0; i < enemyTanks.size(); i++) {
					//从vector中取出一辆坦克
					EnemyTank enemyTank = enemyTanks.get(i);
					//不和自己比较
					if (enemyTank != this) {
						//如果敌人坦克是上/下 x的范围：0——40，y的范围：0——60
						if (enemyTank.getDirection() == 0 || enemyTank.getDirection() == 2) {
							//当前坦克右上角坐标：（60，0）
							if (getX() + 60 >= enemyTank.getX() && getX() + 60 <= enemyTank.getX() + 40
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
							// 右下角坐标(60,40)
							if (getX() + 60 >= enemyTank.getX() && getX() + 60 <= enemyTank.getX() + 40
									&& getY() + 40 >= enemyTank.getY() && getY() + 40 <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
						}
						//如果敌人坦克是左/右 x的范围：0——60，y的范围：0—40
						if (enemyTank.getDirection() == 1 || enemyTank.getDirection() == 3) {
							//当前坦克右上角坐标：（60，0）
							if (getX() + 60 >= enemyTank.getX() && getX() + 60 <= enemyTank.getX() + 60
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
							// 右下角坐标(60,40)
							if (getX() + 60 >= enemyTank.getX() && getX() + 60 <= enemyTank.getX() + 60
									&& getY() + 40 >= enemyTank.getY() && getY() + 40 <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
						}
					}
				}
				break;
			case 2://下
				//让当前敌人坦克和其他所有敌人坦克比较
				for (int i = 0; i < enemyTanks.size(); i++) {
					//从vector中取出一辆坦克
					EnemyTank enemyTank = enemyTanks.get(i);
					//不和自己比较
					if (enemyTank != this) {
						//如果敌人坦克是上/下 x的范围：0——40，y的范围：0——60
						if (enemyTank.getDirection() == 0 || enemyTank.getDirection() == 2) {
							//当前坦克左下角坐标：（0，60）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 40
									&& getY() + 60 >= enemyTank.getY() && getY() + 60 <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
							// 右下角坐标(40，60)
							if (getX() + 40 >= enemyTank.getX() && getX() + 40 <= enemyTank.getX() + 40
									&& getY() + 60 >= enemyTank.getY() && getY() + 60 <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
						}
						//如果敌人坦克是左/右 x的范围：0——60，y的范围：0—40
						if (enemyTank.getDirection() == 1 || enemyTank.getDirection() == 3) {
							//当前坦克左下角坐标：（0，60）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 60
									&& getY() + 60 >= enemyTank.getY() && getY() + 60 <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
							// 右下角坐标(40，60)
							if (getX() + 40 >= enemyTank.getX() && getX() + 40 <= enemyTank.getX() + 60
									&& getY() + 60 >= enemyTank.getY() && getY() + 60 <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
						}
					}
				}
				break;
			case 3://左
				//让当前敌人坦克和其他所有敌人坦克比较
				for (int i = 0; i < enemyTanks.size(); i++) {
					//从vector中取出一辆坦克
					EnemyTank enemyTank = enemyTanks.get(i);
					//不和自己比较
					if (enemyTank != this) {
						//如果敌人坦克是上/下 x的范围：0——40，y的范围：0——60
						if (enemyTank.getDirection() == 0 || enemyTank.getDirection() == 2) {
							//当前坦克左上角坐标：（0，0）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 40
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
							// 左下角坐标：（0，40）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 40
									&& getY() + 40 >= enemyTank.getY() && getY() + 40 <= enemyTank.getY() + 60) {
								//发生碰撞
								return true;
							}
						}
						//如果敌人坦克是左/右 x的范围：0——60，y的范围：0—40
						if (enemyTank.getDirection() == 1 || enemyTank.getDirection() == 3) {
							//当前坦克左上角坐标：（0，0）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 60
									&& getY() >= enemyTank.getY() && getY() <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
							// 左下角坐标：（0，40）
							if (getX() >= enemyTank.getX() && getX() <= enemyTank.getX() + 60
									&& getY() + 40 >= enemyTank.getY() && getY() + 40 <= enemyTank.getY() + 40) {
								//发生碰撞
								return true;
							}
						}
					}
				}
				break;
			default:
				break;
		}
		return false;//没有发生碰撞
	}

	@Override
	public void run() {
		while (true) {
			//这里我们判断如果敌人的子弹为空，就为他增加一颗子弹
			if (isLive && shots.size() == 0) {
				Shot shot = null;
				switch (getDirection()) {
					case 0:
						shot = new Shot(getX() + 20, getY(), 0);
						break;
					case 1:
						shot = new Shot(getX() + 60, getY() + 20, 1);
						break;
					case 2:
						shot = new Shot(getX() + 20, getY() + 60, 2);
						break;
					case 3:
						shot = new Shot(getX(), getY() + 20, 3);
						break;
				}
				shots.add(shot);
				new Thread(shot).start();
			}

			//根据坦克的方向来继续移动
			switch (getDirection()) {
				case 0:
					//让坦克保持一个方向走三十下
					for (int i = 0; i < 30; i++) {
						if (getY() > 0 && !isOverlap()) {
							moveUp();
						}
						//休眠50ms
						try {
							Thread.sleep(50);
						} catch (
								InterruptedException e) {
							throw new RuntimeException(e);
						}
					}
					break;
				case 1:
					for (int i = 0; i < 30; i++) {
						if (getX() + 60 < 1000 && !isOverlap()) {
							moveRight();
						}
						//休眠50ms
						try {
							Thread.sleep(50);
						} catch (
								InterruptedException e) {
							throw new RuntimeException(e);
						}
					}
					break;
				case 2:
					for (int i = 0; i < 30; i++) {
						if (getY() + 60 < 750 && !isOverlap()) {
							moveDown();
						}
						//休眠50ms
						try {
							Thread.sleep(50);
						} catch (
								InterruptedException e) {
							throw new RuntimeException(e);
						}
					}
					break;
				case 3:
					for (int i = 0; i < 30; i++) {
						if (getX() > 0 && !isOverlap()) {
							moveLeft();
						}
						//休眠50ms
						try {
							Thread.sleep(50);
						} catch (
								InterruptedException e) {
							throw new RuntimeException(e);
						}
					}
					break;
			}


			//然后随机改变坦克方向
			setDirection((int) (Math.random() * 4));
			//写并发程序，一定要考虑清楚什么时候结束
			if (!isLive) {//不存活
				break;
			}
		}
	}
}
